Headscale: la alternativa libre a Tailscale

Logo de Tailscale en negro, referencia directa al producto comercial del que Headscale es la alternativa libre que trato en el articulo

Headscale es una reimplementacion libre del plano de control de Tailscale que lleva activa desde 2020 y que en febrero de 2025, con la versión 0.25, alcanza un nivel de madurez donde ya puedo recomendarla sin matices para cargas que no exijan todo el ecosistema comercial. Este post es una guia práctica desde el punto de vista de quien administra una malla de entre cinco y cien nodos y se plantea si merece la pena salir de la plataforma comercial.

El contexto: llevamos malla WireGuard entre tres servidores gestionados con configuración manual desde hace mas de un año. La pregunta que nos haciamos era si Headscale merece sustituir a la gestión manual para una malla que crezca, sin aterrizar en la suscripcion de Tailscale.

Que es Headscale y que no

Tailscale tiene dos partes claramente separables. Por un lado los clientes (tailscale, tailscaled), que son libres y se instalan en cada nodo. Por otro lado el plano de control, que es el servidor comercial de Tailscale: gestiona identidades, claves, ACLs, descubrimiento y coordinacion entre nodos. El plano de datos (los tuneles WireGuard reales) es directo entre nodos y no pasa por la nube de Tailscale.

Headscale, iniciado por Juan Font, es una reimplementacion libre del plano de control. Los clientes oficiales de Tailscale se conectan a un servidor Headscale en lugar de al servidor comercial sin cambios en el cliente. La magia esta en que el protocolo de control es estable y bien documentado, lo que permite que Headscale hable con los mismos clientes que Tailscale.

Lo que Headscale no da es el ecosistema comercial: no hay panel SaaS incluido, no hay integración directa con SSO empresarial como Okta o Entra listo para usar, ni servicios adicionales como Funnel o MagicDNS completamente equiparables. Para muchos casos eso es irrelevante.

La madurez en 2025: que ha cambiado

Cuando probe Headscale por primera vez en 2022, habia bugs de coordinacion que aparecian bajo cargas raras y el panel de administración era un script de linea de comandos. Tres años después el proyecto ha crecido sustancialmente.

La versión 0.24 de enero trajo soporte mas completo para ACL con el formato de politicas de Tailscale, lo que permite migrar reglas existentes sin reescribirlas. 0.25, publicada el 11 de febrero, estabiliza la implementación y corrige problemas con rutas anunciadas y con la resolucion DNS en mallas grandes. A finales de febrero salio 0.25.1 con correcciones puntuales y es la que uso en la instalacion que describo aqui.

Hay también varios paneles de administración de terceros que cubren el hueco del SaaS. Headscale-ui y Headscale Admin son los dos mas activos y ofrecen gestión de usuarios, claves previas y ACLs desde el navegador. No son tan pulidos como el panel comercial pero cubren el 80 por ciento de lo que un administrador necesita.

Arquitectura práctica

Desplegar Headscale en produccion no es complicado para un equipo acostumbrado a operar servicios auto alojados. El componente principal es un binario Go que necesita una base de datos (SQLite o PostgreSQL) y, recomendado, un proxy inverso con TLS delante (Traefik o Caddy). La configuración vive en un archivo YAML con los parametros habituales: URL publica, DERP map (relays opcionales), directivas DNS y politicas de ACL.

La arquitectura interna tiene tres piezas conceptuales. Primero, el mapa de dispositivos y usuarios. Cada dispositivo pertenece a un usuario y tiene claves publicas WireGuard que el servidor firma en una secuencia de validaciones. Segundo, las ACLs, que describen que dispositivos pueden hablar con cuales y en que puertos. Tercero, la coordinacion, que es la parte que mantiene informados a los clientes de los cambios en la topologia.

Los clientes se conectan al servidor por HTTPS y mantienen una conexión abierta de larga duracion. El tráfico real entre nodos es WireGuard directo siempre que es posible, con relay DERP solo cuando NAT estricto lo impide. En nuestra malla todos los nodos tienen IP publica, asi que no usamos DERP y los tuneles son siempre directos.

Las ACLs de Tailscale en Headscale

El lenguaje de politicas de Tailscale, basado en HuJSON, describe usuarios, grupos, etiquetas de dispositivos y reglas permitido entre ellos. Headscale 0.24 y superior admite la sintaxis mas reciente casi por completo, con algunas excepciones menores que el equipo del proyecto documenta.

En la práctica una ACL tipica define grupos (admin, dev, operations), etiqueta los dispositivos (tag:server, tag:laptop) y establece reglas como “los miembros del grupo admin pueden llegar a tag:server en puertos 22 y 443” o “todos pueden llegar a tag:shared-tools en puerto 80”. Es un modelo de identidad sobre red que reemplaza con ventaja a las tipicas reglas por IP.

La parte que mas atención pide son las claves previas (preauthkeys), tokens emitidos por el servidor que permiten a un dispositivo registrarse automaticamente. Emitir claves con caducidad corta y ambito restringido es buena higiene.

Donde sigue siendo menos comodo que Tailscale

No quiero vender Headscale como equivalente total. Hay varias áreas donde la plataforma comercial sigue siendo mejor en 2025.

La primera es la integración SSO. Tailscale permite conectar Okta, Google Workspace, Entra o GitHub con un asistente y en Headscale hay que configurar OpenID Connect a mano, lo que funciona pero no es tan pulido. Para empresas con SSO ya activo es trabajo extra de integración.

La segunda es Funnel, el servicio que permite exponer servicios internos a Internet con TLS automatizado y sin abrir puertos. Headscale no tiene equivalente y lo mas parecido (exponer con Traefik o Caddy frente a un servicio accesible por la malla) requiere configuración adicional.

La tercera es el ecosistema comercial de analitica, observabilidad y auditoria que Tailscale ofrece como parte de la suscripcion. Headscale expone métricas Prometheus y logs estructurados que permiten construir lo equivalente, pero hay que hacerlo uno mismo.

La cuarta es la soporte. Si tienes un incidente con Tailscale puedes abrir un ticket comercial. Con Headscale tienes los issues del repositorio, que son muy activos, y una comunidad razonable, pero no hay acuerdo de nivel de servicio.

Mi lectura

Para un equipo técnico que ya auto aloja cosas y tiene confianza con PostgreSQL, un proxy inverso y TLS automatizado, Headscale en 2025 es una alternativa seria y sin asterisco grande. Es especialmente útil cuando los requisitos de cumplimiento pasan por tener control total del plano de control (sector publico, sanitario, defensa) y la plataforma comercial queda fuera por politica. También en hogares y laboratorios donde el coste de la suscripcion no esta justificado.

Donde yo seguiria en Tailscale comercial es en empresas donde el tiempo del equipo cuesta mas que la suscripcion, donde el SSO y las integraciones son parte del dia a dia y donde Funnel o los servicios adicionales aportan valor concreto. También en equipos pequeños sin capacidad operativa para otro servicio mas que mantener.

En mi caso la decision es hibrida. Para la infraestructura interna critica, con tres nodos estables, Headscale 0.25 ya hace mejor trabajo que la configuración manual de WireGuard que teniamos y sin depender de un proveedor externo. Para equipos personales con requisitos menos claros, sigo con Tailscale comercial por pura comodidad. La decision no es ideologica, es operacional.

Entradas relacionadas